1. Technical Field
One or more embodiments of the present invention generally relate to a system and method for generating a user callstack trace.
2. Background Art
High level parallel programming languages, such as, but not limited to OpenMP, provide high level constructs which gives users the ability to specify concurrent entities. Implementations of such programming languages outline the body of a construct into a separated function that may be called back by a corresponding parallel runtime library for concurrent execution.
A native callstack corresponds to a reserved stack of memory that includes data. The data corresponds to code that is actually being executed by various execution entities or has been executed by the various execution entities. Such data may be presented to the programmer as a trace. While inspecting the native callstack when the user's program is executed concurrently on the various execution entities, the contents of the native callstack may be different from the actual user code due to runtime libraries and threads that call various functions within a particular programming language. Such a condition may alter a programmer's ability to locate callee/caller relationships or other such logical relationships in the native callstack while observing various points of interests or “events” within the system.
In general, the logic within the native callstack is different from that within the user's program making debugging or profiling of other such performance events difficult for programmers. Conventional tools are not capable of providing a callstack that provides traceable data that coincides with the logic in the user's program.